﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIGEB.Modelo.moduloPerfiles;
using SIGEB.Prototipo.control;

namespace SIGEB.Prototipo.Control
{
    public class controlPerfil
    {
        #region "constructores"

        public controlPerfil(controlPrincipal cp)
        {
            this.cp = cp;
        }

        #endregion

        #region "validación"

        internal bool permisosValidos(string permisos, tipoPerfil predeterminados)
        {
            return new perfil(null, permisos, predeterminados).permisosCorrectos();
        }

        internal bool camopsValidos(string permisos, tipoPerfil idTipo)
        {
            return permisosValidos(permisos, idTipo);
        }

        internal bool camposModifValidos(perfil perf)
        {
            return permisosValidos(perf.permisos, perf.tipoPerfilP);
        }

        internal bool idPerfilValido(string idPerfil)
        {
            return Validacion.LongitudCadenaValida(idPerfil, true, 0);
        }

        #endregion

        #region "métodos"

        internal void crearPerfil(string permisos, tipoPerfil idTipo)
        {
            if (!camopsValidos(permisos, idTipo))
            {
                throw new Exception("no todos los campos son válidos");
            }
            cp.datos.perfiles.agregarperfil(new perfil(null, permisos, idTipo));
        }

        internal void modificarPerfil(perfil pef)
        {
            if (!camposModifValidos(pef))
            {
                throw new Exception("campos inválidos");
            }
            if (!cp.usuarioActualPuede(acciones.PERF_MODIFICAR))
            {
                cp.ExcepcionUsrSinPermisos();
            }
            cp.datos.perfiles.modificarperfil(pef.codPerfil, pef);
        }

        internal void eliminar(string idPerfil)
        {
            if (!idPerfilValido(idPerfil))
            {
                throw new Exception("id inválido");
            }
            cp.datos.perfiles.eliminarperfil(idPerfil);
        }

        internal LinkedList<perfil> todosPerfiles()
        {
            if (!cp.usuarioActualPuede(acciones.PERF_CONSULTAR_TOD))
            {
                return null;
            }
            return cp.datos.perfiles.obtenerTodos();
        }

        internal perfil obtenerPerfil(string id)
        {
            if (!idPerfilValido(id))
            {
                throw new Exception("id perifl inválido");
            }
            if (!cp.usuarioActualPuede(acciones.PERF_CONSULTAR_TOD))
            {
                return null;
            }
            return cp.datos.perfiles.obtenerperfil(id);
        }

        internal perfil obtenerPerfilActual()
        {
            if (!idPerfilValido(cp.usuarioActual().idPerfil))
            {
                throw new Exception("id perifl inválido");
            }
            if (!cp.usuarioActualPuede(acciones.PERF_CONSULTAR_TOD))
            {
                return null;
            }
            return cp.datos.perfiles.obtenerperfil(cp.usuarioActual().idPerfil);
        }

        #endregion

        #region "atributos"

        controlPrincipal cp;

        #endregion
    }
}
